package com.c2b.algorithm.leetcode.base;

import java.util.HashSet;
import java.util.Set;

/**
 * <a href='https://leetcode.cn/problems/jewels-and-stones/'>宝石与石头(Jewels and Stones)</a>
 * <p> 给你一个字符串 jewels 代表石头中宝石的类型，另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型，你想知道你拥有的石头中有多少是宝石。</p>
 * <p>字母区分大小写，因此 "a" 和 "A" 是不同类型的石头。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：jewels = "aA", stones = "aAAbbbb"
 *      输出：3
 *
 * 示例 2：
 *      输入：jewels = "z", stones = "ZZ"
 *      输出：0
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *     <ul>
 *         <li>1 <= jewels.length, stones.length <= 50</li>
 *         <li>jewels 和 stones 仅由英文字母组成</li>
 *         <li>jewels 中的所有字符都是 唯一的</li>
 *     </ul>
 * </p>
 *
 * @author c2b
 * @since 2023/12/18 14:19
 */
public class LC0771JewelsAndStones_S {
    static class Solution {

        public int numJewelsInStones(String jewels, String stones) {
            int ans = 0;
            for (char ch : stones.toCharArray()) {
                for (char jewel : jewels.toCharArray()) {
                    if (jewel == ch) {
                        ++ans;
                        break;
                    }
                }
            }
            return ans;
        }

        public int numJewelsInStones2(String jewels, String stones) {
            Set<Character> jewelCharSet = new HashSet<>();
            for (char jewel : jewels.toCharArray()) {
                jewelCharSet.add(jewel);
            }
            int ans = 0;
            for (char ch : stones.toCharArray()) {
                if (jewelCharSet.contains(ch)) {
                    ++ans;
                }
            }
            return ans;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.numJewelsInStones("aA", "aAAZZ"));
    }

}
